//////////////////////////////////////////////////////////////////////
//
// NO_ArchiveCout.cpp interface for the NO_ArchiveCout class.
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#define NO_TAL_EXPORT

//////////////////////////////////////////////////////////////////////////
#include "NO_Externs.h"
#include "NO_ArchiveCout.h"
NO_UInt32 tabCount = 0;

//////////////////////////////////////////////////////////////////////
// con/destruction
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_ArchiveCout::NO_ArchiveCout(void){}
NO_ArchiveCout::NO_ArchiveCout(const NO_ArchiveCout& rhs){}
NO_ArchiveCout::~NO_ArchiveCout(){}

//////////////////////////////////////////////////////////////////////////
// use
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::operator<<(NO_Object& value)	{return NO_OArchive::operator <<(value);}
NO_IArchive& NO_ArchiveCout::operator>>(NO_Object& value)	{return NO_IArchive::operator >>(value);}

//////////////////////////////////////////////////////////////////////////
// write
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::write(NO_Boolean& value)	{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_Int& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_Int8& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_UInt& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_UInt8& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_SInt8& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_UInt16& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_SInt16& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_UInt32& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_SInt32& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_UInt64& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<(NO_UInt32)value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_SInt64& value)		{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<(NO_UInt32)value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_Float32& value)	{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}
NO_OArchive& NO_ArchiveCout::write(NO_Float64& value)	{for(int i=0; i<tabCount; i++){std::cout<<"  ";}std::cout<<value<<" "<<std::endl; return *this;}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::write(std::string& value)	 
{
	for(int i=0; i<tabCount; i++){std::cout<<"  ";}
	NO_UInt32 size = value.size();	
	std::cout<<size<<value.c_str()<<" "<<std::endl; 
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::write(const NO_Int8* value)  
{
	NO_UInt32 size = strlen(value);	
	std::cout<<size<<value<<" "<<std::endl; 
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::write(NO_Int8* value)		 
{
	
	NO_UInt32 size = strlen(value);	
	std::cout<<size<<value<<" "<<std::endl; 
	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::writeBegin(NO_Object& object)
{
	const NO_Type& type	= object.getType();
	std::string name	= type.getName();

	int i;
	for (i = 0; i < tabCount ; i++){std::cout<<"  ";}
	std::cout<<name.c_str()<<" "<<"0x"<<std::flush;
	std::cout.width(8);
	std::cout.fill('0');
	std::cout<<std::internal<<std::uppercase<<std::hex<<object.getID();
	std::cout<<" "<<object.getNum()<<" "<<std::endl<<std::dec;

	for(i=0; i<tabCount; i++){std::cout<<"  ";}
	std::cout<<"{"<<std::endl;
	tabCount++;

	return *this;
}

//////////////////////////////////////////////////////////////////////
NO_OArchive& NO_ArchiveCout::writeEnd(NO_Object& object)
{
	

	const NO_Type& type	= object.getType();
	const NO_Int8* name	= type.getName().c_str();

	tabCount--;
	for(int i=0; i<tabCount; i++){std::cout<<"  ";}
	std::cout<<"}"<<std::endl;

	return *this;
}

//////////////////////////////////////////////////////////////////////////
// read
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveCout::read(NO_Boolean& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_Int& value)		{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_Int8& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_UInt& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_UInt8& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_SInt8& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_UInt16& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_SInt16& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_UInt32& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_SInt32& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_UInt64& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_SInt64& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_Float32& value)	{ return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_Float64& value)	{ return *this;}

//////////////////////////////////////////////////////////////////////
NO_IArchive& NO_ArchiveCout::read(std::string& value)	{return *this;}
NO_IArchive& NO_ArchiveCout::read(const NO_Int8* value)	{return *this;}
NO_IArchive& NO_ArchiveCout::read(NO_Int8*& value)		{return *this;}
NO_IArchive& NO_ArchiveCout::readBegin(void)				{return *this;}
NO_IArchive& NO_ArchiveCout::readEnd(void)				{return *this;}

//////////////////////////////////////////////////////////////////////
// operators
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
NO_ArchiveCout& NO_ArchiveCout::operator=(const NO_ArchiveCout& rhs){return (*this);}

